/*
 * BloqueDeCorreos.cpp
 *
 *  Created on: 02/10/2010
 *      Author: damian
 */

#include "BloqueDeCorreos.h"


int BloqueDeCorreos::getLongitudCorreo(int offset){

	//TODO Check this dude..

	string longOrigen;
	string longDestinatario;
	string longAsunto;
	string longMensaje;
	int tamanioOrigen;
	int tamanioDestinatarios;
	int tamanioAsunto;
	int tamanioMensaje;

	int tamanioIucYFecha = 18;
	int offsetInicial = offset;

	int aumento = 0;

	//ORIGEN
	for (int i = 0; i < 4; i++){
		longOrigen = longOrigen + this->getMemoria()[offset + tamanioIucYFecha + i];
		aumento++;
	}
	offset = offset + aumento;

	tamanioOrigen = Utils::StringToInt(longOrigen);

	aumento = 0;

	//DESTINATARIO
	for (int i = 0; i < 4; i++){

		longDestinatario = longDestinatario + this->getMemoria()[offset + tamanioIucYFecha + i];

		aumento++;
	}
	offset = offset + aumento;

	tamanioDestinatarios = Utils::StringToInt(longDestinatario);

	aumento = 0;

	//ASUNTO
	for (int i = 0; i < 4; i++){

		longAsunto = longAsunto + this->getMemoria()[offset + tamanioIucYFecha  + i];

		aumento++;
	}
	offset = offset + aumento;
	tamanioAsunto = Utils::StringToInt(longAsunto);

	aumento = 0;

	//MENSAJE

	for (int i = 0; i < 4; i++){

		longMensaje = longMensaje + this->getMemoria()[offset + tamanioIucYFecha + i];

		aumento++;
	}

	tamanioMensaje = Utils::StringToInt(longMensaje);


	int tamanioCorreo = 0;
	tamanioCorreo = tamanioOrigen + tamanioDestinatarios + tamanioAsunto + tamanioMensaje +
			tamanioIucYFecha + (offset - offsetInicial) + aumento;

	return tamanioCorreo;

}

bool BloqueDeCorreos::esIucIgual(string iuc1, string iuc2){

	bool iguales = ((iuc1.compare(iuc2))==0);
	return iguales;
}

string BloqueDeCorreos::obtenerMail(IUC* iuc){



	bool finBloque = false;
	bool encontrado = false;
	string iucBuscado(iuc->getId());
	int offset = 0;

	string iucLeido;

	do{

		iucLeido = this->getMemoria().substr(offset,4);

		encontrado = this->esIucIgual(iucLeido,iucBuscado);

		if (!encontrado) offset = offset + this->getLongitudCorreo(offset);

		finBloque = (offset >= this->getMemoria().length());

	}while((!encontrado)&&(!finBloque));


	if (encontrado) {

		int tamanioMailEncontrado = this->getLongitudCorreo(offset);

		string mailEncontrado;

		mailEncontrado = this->getMemoria().substr(offset,tamanioMailEncontrado);


		return mailEncontrado;


	}else return " ";


}


string BloqueDeCorreos::getMemoria()
{
    return memoria;
}

int BloqueDeCorreos::getNumeroBloque()
{
    return numeroBloque;
}

int BloqueDeCorreos::getTamanioBloque()
{
    return tamanioBloque;
}

void BloqueDeCorreos::setMemoria(string memoria)
{
	this->memoria = memoria;
}

void BloqueDeCorreos::setNumeroBloque(int numeroBloque)
{
    this->numeroBloque = numeroBloque;
}

fstream *BloqueDeCorreos::getArchivo()
{
    return archivo;
}

void BloqueDeCorreos::setArchivo(fstream *archivo)
{
    this->archivo = archivo;
}

void BloqueDeCorreos::setTamanioBloque(int tamanioBloque)
{
    this->tamanioBloque = tamanioBloque;
}

BloqueDeCorreos::~BloqueDeCorreos() {
	// TODO Auto-generated destructor stub
}

